Introduction

Hitting a baseball has been shown to be one of the most difficult tasks in all of sports. Anybody who has gone to a batting cage and tried the fastest machine for fun knows how hard it can be to hit a normal fastball. That does not even include the possibilities of breaking balls and off-speed pitches. Batters have a fraction of a fraction of a second to recognize a pitch, determine if that pitch will be a ball or a strike, and set their swing into motion. Considering the human body can only move so fast to get the bat over the plate, the batter has to make their decision moments after the ball leaves the pitcher’s hand. To give themselves the best chance of making good contact, professional baseball players will often attempt to predict whether a changeup, fastball, or a curveball is coming before the ball leaves the pitcher’s hand.

Hitters will use a variety of information to inform their prediction of an upcoming pitch, including scouting reports that teams build coming into a game, situational context, memory of the previous few pitches, and game specific tendencies of a pitcher. In this project, we attempt to model this decision making process with a random forest pitch type classifier. We use pitch level data from the 2015-2018 seasons to predict pitch types for 30 different pitchers who played during that type period.

Our model aims contributes to the baseball world in the following ways. First, by testing how different sets of features perform at classifying out of sample pitch types, we see that some features are more important for certain pitchers than they are for others. This will help teams focus on the important information when building scouting reports going into a game against a certain pitcher.

Second, we aim to make the results of our pitch type predictor accessible to baseball fans in hopes that it can augment their viewing experience. For many enthusiasts, strategizing along side the players from pitch to pitch, guessing both what the pitcher is going to throw as well as what the batter’s strategy will be, is the most enjoyable part of the game. However, among more casual fans, baseball has the reputation for being “boring” to watch, largely due to the pauses between every pitch, during which players sometimes take 30 or more seconds to relay signs and perform ritualistic jersey adjustments, bat taps, and other manor of baseball superstition. To make this aspect of baseball more palatable to fans, we built an R Shiny web application that allows them to input game situations and call our model’s pitch type predictions in real time, allowing them to take part in the “game within the game” of baseball.

This report proceeds as follows. First we analyze the physical attributes of the pitches that our 30 selected pitchers throw, making the case that it is indeed in the batters best interest to have an idea of how a particular pitch is going to move once it leave the pitcher’s hand. Second, we show some evidence that pitchers do adopt different strategies for different game situations. We then describe the rich, pitch level data set we use for this analysis. Finally, we discuss our random forest classifier and the results it produces.

Why do we care about a pitch?

Not all pitches are made the same. From sliders to cutters to knuckleballs, each pitch tends to have its own characteristics that define it.

pitch_type px pz start_speed end_speed spin_rate spin_dir break_angle break_length break_y
CH -0.2004531 1.859088 85.81363 79.19324 1734.5396 212.37185 8.859414 7.694970 23.82537
CU 0.0756174 1.802014 78.16450 72.29356 1446.6248 89.21560 -9.948970 12.569182 23.83973
EP 0.1831130 2.022092 66.51596 61.32254 1381.7363 44.09603 -9.033333 16.907512 23.85540
FA -0.1840000 1.768333 88.90000 80.60000 2448.7507 148.70967 -7.066667 7.500000 23.70000
FC 0.2211626 2.310223 88.54320 81.99196 1018.4097 164.45461 -5.357321 6.093412 23.85148
FF 0.0071570 2.638026 93.62794 85.90142 2175.7277 193.63051 13.491285 3.721318 23.79359
FS -0.3771798 1.915900 84.56765 78.60294 1483.1980 222.07379 17.104412 6.652941 23.85882
FT -0.0227988 2.351487 92.15093 84.67758 2129.6691 169.48873 -5.557804 5.749812 23.80294
KC 0.0839310 1.709555 81.50706 75.23154 1318.3440 89.54775 -6.516319 11.551069 23.82959
PO 0.9680839 4.114041 86.21714 79.08000 1928.4078 210.20437 21.037143 5.171429 23.79143
SI -0.1321975 2.309338 92.81275 85.41892 2008.5825 216.36221 21.267940 5.879977 23.80938
SL 0.2318519 1.866506 85.58814 79.35203 901.0771 162.50623 -3.270639 8.079149 23.85377
UN 3.4876667 3.531333 41.86667 39.80000 823.2617 218.88567 -1.166667 31.800000 23.96667

So to some degree we have established that each pitch has a unique set of characteristics for the most part. However, this set of characteristics is also unique to each pitcher.

Pichers be sequencing

AB networks

The Data

The data involved in this project consists of every pitch from the 2015 through the 2018 Major League Baseball (MLB) seasons. These four seasons contained nearly 3 million observations, and the data include categorization of 16 different types of pitches, the spin, speed, and location of each pitch, the game situation (score, runners on base, balls and strikes, etc.), information about the pitcher and batter, and the result of the at-bat.

From this data set, we engineer a few important features. Since each pitch is identified by an at bat id and a pitch number, we can add the previous pitch types as features to each pitch. For this model, we add categorical features for the previous two pitches. We also add the previous at bat’s result as a feature.

Although information on each batter might be helpful for this modeling problem, we did not have easy access to this kind of hitter data. As an alternative, we add a factor variable indicating the position in the batting order the pitcher is facing. A team’s best hitters tend to bat 3rd or 4th in the order, and a team’s worst hitter tends to bat 8th and 9th, so batting order may be able to tell our model a lot about what pitch types a pitcher will throw.

Lastly, we add features for the game specific share of a pitcher’s total pitches that each pitch types makes up. This set of features is meant to capture the fact that a pitcher’s arsenal of pitch types may change from game to game. Most games a pitcher might throw mostly four seam fastballs, but there might be game specific “fixed effects” that lead him to rely more on his secondary pitches. We’d like our model to be able to use this information in making its predictions.

Methodology

Given how difficult it is to get hits consistently at the major league level, having an idea an idea of what the opposing pitcher is about to throw would confer a significant advantage to the hitter. We endeavor to create a model that successfully predicts the next pitch a pitcher will throw in an at-bat, given the circumstances of the at-bat, the tendencies of the pitcher, and the progress of the game up to that point. Using three distinct random forest models, we derive a predictive approach that generally outperforms guessing that the pitcher will throw their most common pitch (often called “sitting on a pitch”), and in most cases, significantly exceeds this “sitting on a pitch” approach.

The models are generated with a train/test split and then evaluated for the out-of-sample performance against the testing set. Models are generated per pitcher, in such a way that be beneficial in application to a baseball manager or hitter, given the situation in the game.

Our Random Forests

Random forests, much like actual forests, are an aggregation of individual trees. Tree models make predictions through a series of binary decisions based on a selection of features that sort the data into groups of most likely outcomes. While trees are intuitive, a well performing model will add some layers of complexity that reduce over fitting. Bootstrap aggregating, or “bagging” involves taking \(B\) bootstrapped samples of the original data and fitting a tree model to each one. Predictions are generated using a summary of the \(B\) tree models. For a categorical outcome, each tree model contributes one vote and the outcome is classified by majority rule.

Random forests extend bagged trees by only allowing each individual tree to use \(m\) of the total number of features, \(p\). So bagging is equivalent to a random forest with \(m = p\). Restricting the each tree to a subset of the total features decorrelates the individual tree models, reducing variance in the predictions and making it less likely that the model will over fit the data. For our random forest models, we use a common choice of feature size, \(m \approx \sqrt p\).

The Situational Model

The first of our three random forest models uses information readily available in the at-bat to predict the upcoming pitch. The features involved here include the ball-strike count, opposing batter’s stance, inning, how many pitches thrown in the at-bat so far, the game score, and the runners on base. This is the most interpretable model, as it is composed of the factors that are generally considered most relevant and well-known by players and coaches in the moment. As random forests are an aggregation of individual trees, it can be illustrative to look at a single tree to get a sense for how decisions are being made at various nodes. Consider, for example, the following tree as an example of what the random forest is doing for pitcher Felix Hernandez.

Hernandez is a pitcher with a diverse arsenal of pitches. As one can see, the predictive model analyzes factors about the game situation to indicate the next pitch. It considers, for example, the count on the batter and whether the batter stands left or right. After running through the branches and nodes with binary decisions based on the in-game situation, a prediction about the next pitch is made at the bottom of the tree. The random forest takes a bootstrap aggregate of trees like this one, but a single tree helps us see an example of the predictive process.

The Lagged Model

The second random forest builds upon the features selected in the Situational Model and supplements them with information about the previous two pitches and the event the last at-bat. This allows for the model to incorporate lagged information that might directly influence the next pitch. Did the pitcher just give up a home run on the curve? Maybe it’s a steady diet of fastballs from here on out. Did the pitcher just give the batter two straight fastballs to study? Perhaps it’s time for an off-speed pitch like a change-up.

Trash Can Model

The third and final random forest uses nearly every feature from the dataset to control for all possible scenarios and variations in the feature matrix. This means that it not only considers all the factors included in the other two models, but also includes what the pitcher’s game has looked like so far; that is, it takes into account the pitch choices as a percent of the overall pitches in the game up to that point. (Is this a correct reading?) So if the pitcher is leaning heavily on the slider that day, this model will incorporate that pattern.

Results

In [TABLE/APPENDIX], we publish our models’ results for 30 pitchers from Major League Baseball. These pitchers are generally considered some of the best in the business, but there are some pitchers from outside the top tier for completeness. We also note that the model is easily adaptable to any pitcher who threw between 2015 and 2018. In [TABLE/APPENDIX], we present the pitching profiles of the 30 pitchers based on the style of their pitches and the frequency that they are thrown.

To measure our models’ effectiveness, we compare them to the most-common pitch thrown by the pitcher (called “sitONE”) and to each other. The out-of-sample performance of each model is presented in “trashcans” 1 to 3 (our sincerest apologies to Astros fans for the name).

Most models improved on the guess of the upcoming pitch when compared to the “sitting on the pitch” as seen in [TABLE/APPENDIX]. Consider the case of Chris Sale. Sale is a perennial All-Star, and finished top-5 in Cy Young (MLB’s most valuable pitcher award) votes each year of our data. If a batter were to look for his most common pitch (the two-seam fastball), he would would only be right about one third of the time. However, Sale becomes increasingly more predictable as the model incorporates more features. The Situational Model and the Lagged Model predict his next pitch at 37% and 38% respectively. Still, the Game Fixed Effects Model predicts his next pitch with an out-of-sample accuracy of nearly 46%, a jump of about 13%. There isn’t a hitter in baseball who wouldn’t want to know Sale’s next pitch with a 13% increase in accuracy!

(Do these numbers need to be responsive to different train/test splits?) I think it’d be nice, but I think it counts as unfeasible for our computing power purposes since running the models once takes me about 30 minutes for me at least. But for interpretation purposes, small difference in performance might not be stable results so they shouldn’t be read into too much.

On the other hand, some pitcher profiles grew in accuracy only up through the first or second model, and then decrease as more features are added. For example, Mark Melancon and Huston Street have out-of-sample prediction accuracies that peak in the Lagged Model but fall in the Game Fixed Effects Model. We present this as some evidence of over-fitting for certain pitchers.

Not all pitchers are particularly predictable, however. Corey Kluber, a two-time Cy Young winner (one time in our data window), has such a varied arsenal of pitches that even the most predictive model (.343 out of sample accuracy) barely little information about the next pitch, even if it beats he sit-one rate. Further, some pitchers remained elusive for all three of the models. Trevor Rosenthal, for instance, throws a fastball on 75% of his pitches, and all three models performed worse than this “sitting on the pitch” rate. [Do we have a good reason for why this might be happening?]

Finally, we note that predictive power does not necessarily equate to hits. Enter Zack Britton, who led the league in saves during the 2016 season. Britton is nearly a one-pitch pitcher, throwing sinkers on 89.7% of his pitches. The Game Fixed Effects model improves this prediction a few fractions of a percent, but in either case, it’s fair to say that most hitters know exactly what Britton is about to throw. Nevertheless, Britton put up an otherworldly 0.54 ERA in 2016! That is to say, even if batters knew with near perfect clairvoyance a that sinker was on its way, making contact that leads to a hit is a whole other matter.

what it all means, probably nothing

implications for how hitters should approach thinking about predicting pitches. What it all means: - we’ve demonstrated that the game situation, previous pitches, previous result, batting order position, and game to game changes in a pitcher’s “stuff” all help predict pitches - for some pitcher, all of these features are helpful. for others, using all of the features over fits - this modelling is not dierrctly useful to teams on a pitch to pitch level. it’d probably be considered cheating for an assistant coach to be sitting in the dugout with laptop inputting the situation and having the model spit back predictions. Baseball has already shown it is uncomfortable with certain levels of technology entering the game, adding machine learning would be overstepping no doubt. - rather, what we’ve provided is a framework for hitters to analyze what kind of information is helpful in predicting a particular pitcher’s pitch type. They can focus on the information that is important and ignore the rest. this will help them in building scouting reports on pitchers - as the Astros showed us all in 2017?, this is crucial

(gonna try to make this coherent) Moreover: - where our work might be useful on a pitch to pitch basis is with fan enjoyment experience. baseball has lost popularity in recent years, with Tv ratings on the decline and game attendance faltering as well. Surely, this decrease is due to the games slow pace and lack of entertainment value for the casual fan. after all, the game grinds to a halt after each pitch, pausing for players and coaches to relay signs, adjust equipment, and mentally prepare for the next pitch

but for baseball enthusiasts, this segmented gameplay is part of the fun. After each pitch, it is perfectly observable to all players involved what the situation is. The “game within the game” is figuring out how to best respond to each state of the game. And a big part of that is the batter trying to guess what pitch is coming and the pitcher trying to throw a pitch that the batter might not expect.

our modeling tool can be a tool to let fans watching at home in on the game within the game, which is why we’ve built our shiny web app. Our app allows a fan to input a situation and get pitch prediction percentages in return. This will vastly improve porch beers with the boys while listening to America’s past time on the radio as well as Friday Night baseball on the couch with Dom’s

Appendix

Overall Performance
pitcher_last pitcher_first rate_sitONE rate_trashcan1 rate_trashcan2 rate_trashcan3
Archer Chris 0.474 0.559 0.580 0.566
Arrieta Jake 0.471 0.474 0.477 0.470
Boxberger Brad 0.631 0.644 0.651 0.644
Britton Zach 0.896 0.894 0.899 0.899
Bumgarner Madison 0.283 0.314 0.367 0.409
Chapman Aroldis 0.748 0.732 0.738 0.731
Cole Gerrit 0.497 0.482 0.491 0.469
Darvish Yu 0.367 0.389 0.412 0.453
Davis Wade 0.487 0.474 0.459 0.452
deGrom Jacob 0.428 0.407 0.419 0.410
Gray Sonny 0.321 0.394 0.401 0.421
Gregerson Luke 0.433 0.513 0.492 0.560
Greinke Zack 0.417 0.430 0.436 0.411
Hernandez Felix 0.314 0.380 0.389 0.368
Kershaw Clayton 0.475 0.506 0.522 0.522
Keuchel Dallas 0.467 0.470 0.483 0.476
Kluber Corey 0.322 0.330 0.343 0.338
McHugh Collin 0.332 0.360 0.397 0.398
Melancon Mark 0.588 0.608 0.608 0.596
Miller Andrew 0.574 0.583 0.601 0.581
Norris Bud 0.411 0.467 0.457 0.451
Price David 0.323 0.322 0.322 0.338
Rosenthal Trevor 0.752 0.726 0.740 0.704
Sale Chris 0.332 0.370 0.381 0.463
Scherzer Max 0.528 0.530 0.526 0.484
Strasburg Stephen 0.482 0.467 0.461 0.435
Street Huston 0.427 0.672 0.700 0.645
Tolleson Shawn 0.614 0.598 0.603 0.554
Wacha Michael 0.517 0.516 0.514 0.483
Zimmermann Jordan 0.510 0.503 0.499 0.479
Pitch Types: Trevor Rosenthal
pitch_type count pct
FF 2206 0.753
CH 432 0.148
SL 255 0.087
CU 32 0.011
FT 2 0.001
FA 1 0.000
Pitch Types: Felix Hernandez
pitch_type count pct
SI 2956 0.314
CH 2348 0.249
CU 2185 0.232
FF 1393 0.148
SL 536 0.057
FC 10 0.001
Pitch Types: Chris Archer
pitch_type count pct
FF 6045 0.474
SL 5295 0.415
CH 1125 0.088
FT 250 0.020
CU 36 0.003
Pitch Types: Zach Britton
pitch_type count pct
SI 2840 0.897
SL 243 0.077
FF 59 0.019
FT 24 0.008
Pitch Types: Wade Davis
pitch_type count pct
FF 1910 0.487
FC 1133 0.289
KC 788 0.201
FT 86 0.022
CH 1 0.000
Pitch Types: Dallas Keuchel
pitch_type count pct
FT 5442 0.467
SL 2394 0.206
CH 1429 0.123
FC 1203 0.103
FF 1175 0.101
Pitch Types: Corey Kluber
pitch_type count pct
SI 4012 0.322
CU 2615 0.210
FF 1931 0.155
SL 1637 0.131
FC 1578 0.127
CH 684 0.055
Pitch Types: Luke Gregerson
pitch_type count pct
SL 1250 0.435
SI 738 0.257
FT 550 0.192
FF 261 0.091
CH 41 0.014
FC 31 0.011
CU 1 0.000
Pitch Types: David Price
pitch_type count pct
FT 3536 0.323
CH 2359 0.216
FC 2152 0.197
FF 2141 0.196
KC 744 0.068
Pitch Types: Max Scherzer
pitch_type count pct
FF 7117 0.528
SL 2639 0.196
CH 1856 0.138
CU 1090 0.081
FC 688 0.051
FT 89 0.007
Pitch Types: Aroldis Chapman
pitch_type count pct
FF 2927 0.749
SL 748 0.192
CH 158 0.040
SI 73 0.019
Pitch Types: Clayton Kershaw
pitch_type count pct
FF 4873 0.475
SL 3435 0.335
CU 1737 0.169
FT 153 0.015
CH 51 0.005
Pitch Types: Madison Bumgarner
pitch_type count pct
FF 2985 0.283
SL 2111 0.200
FT 1874 0.178
CU 1822 0.173
FC 1318 0.125
CH 441 0.042
Pitch Types: Sonny Gray
pitch_type count pct
FF 3193 0.321
FT 2712 0.273
CU 1596 0.161
SL 1537 0.155
CH 712 0.072
FC 182 0.018
Pitch Types: Huston Street
pitch_type count pct
SI 623 0.428
SL 541 0.371
CH 293 0.201
Pitch Types: Brad Boxberger
pitch_type count pct
FF 1942 0.634
CH 942 0.308
SL 86 0.028
CU 53 0.017
FC 37 0.012
FT 2 0.001
Pitch Types: Zack Greinke
pitch_type count pct
FF 5049 0.418
SL 2402 0.199
CH 2200 0.182
CU 1305 0.108
FT 1032 0.085
EP 104 0.009
Pitch Types: Shawn Tolleson
pitch_type count pct
FF 1113 0.618
CH 291 0.161
SL 291 0.161
FT 64 0.036
FC 43 0.024
Pitch Types: Jordan Zimmermann
pitch_type count pct
FF 4853 0.510
SL 2547 0.268
CU 1437 0.151
CH 346 0.036
FT 326 0.034
Pitch Types: Jacob deGrom
pitch_type count pct
FF 5009 0.428
SL 2384 0.204
FT 1687 0.144
CH 1490 0.127
CU 1121 0.096
Pitch Types: Gerrit Cole
pitch_type count pct
FF 5812 0.497
SL 2253 0.193
KC 1440 0.123
SI 815 0.070
CH 715 0.061
FT 626 0.054
CU 29 0.002
Pitch Types: Mark Melancon
pitch_type count pct
FC 1913 0.589
KC 864 0.266
FF 443 0.136
FS 30 0.009
Pitch Types: Jake Arrieta
pitch_type count pct
SI 5663 0.471
SL 2583 0.215
CU 1584 0.132
FF 1368 0.114
CH 830 0.069
Pitch Types: Andrew Miller
pitch_type count pct
SL 2068 0.575
FF 1446 0.402
FT 81 0.023
Pitch Types: Stephen Strasburg
pitch_type count pct
FF 4464 0.483
CU 1757 0.190
CH 1487 0.161
FT 776 0.084
SL 762 0.082
Pitch Types: Collin McHugh
pitch_type count pct
FF 2879 0.332
FC 2447 0.283
CU 2141 0.247
SL 440 0.051
FT 383 0.044
CH 371 0.043
Pitch Types: Michael Wacha
pitch_type count pct
FF 4822 0.518
CH 1793 0.193
FC 1521 0.163
CU 1085 0.116
FT 93 0.010
Pitch Types: Chris Sale
pitch_type count pct
FT 4218 0.332
SL 3509 0.276
CH 2660 0.210
FF 2301 0.181
FA 2 0.000
FS 1 0.000
Pitch Types: Zack Greinke
pitch_type count pct
FF 5049 0.418
SL 2402 0.199
CH 2200 0.182
CU 1305 0.108
FT 1032 0.085
EP 104 0.009
Pitch Types: Yu Darvish
pitch_type count pct
FF 1967 0.367
SL 1261 0.235
FT 969 0.181
FC 684 0.128
CU 328 0.061
CH 104 0.019
FS 37 0.007
EP 5 0.001
By Pitch Performance: Trevor Rosenthal
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FF 0.952 0.980 0.907
CH 0.069 0.023 0.092
SL 0.000 0.000 0.098
CU 0.000 0.000 0.000
FT 0.000 0.000 0.000
By Pitch Performance: Felix Hernandez
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
SI 0.591 0.633 0.566
CH 0.447 0.432 0.406
CU 0.277 0.277 0.238
FF 0.129 0.115 0.197
SL 0.009 0.037 0.083
FC 0.000 0.000 0.000
By Pitch Performance: Chris Archer
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FF 0.685 0.700 0.650
SL 0.554 0.582 0.585
CH 0.053 0.080 0.124
FT 0.000 0.000 0.200
CU 0.000 0.000 0.000
By Pitch Performance: Zach Britton
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
SI 0.995 0.998 0.991
SL 0.000 0.000 0.041
FF 0.000 0.000 0.000
FT 0.400 0.600 1.000
By Pitch Performance: Wade Davis
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FF 0.770 0.846 0.730
FC 0.264 0.123 0.233
KC 0.114 0.057 0.146
FT 0.000 0.000 0.000
By Pitch Performance: Dallas Keuchel
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FT 0.870 0.869 0.769
SL 0.251 0.263 0.280
CH 0.059 0.122 0.175
FC 0.017 0.033 0.183
FF 0.034 0.043 0.191
By Pitch Performance: Corey Kluber
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
SI 0.705 0.702 0.518
CU 0.377 0.396 0.331
FF 0.023 0.041 0.189
SL 0.055 0.088 0.262
FC 0.038 0.060 0.269
CH 0.161 0.146 0.066
By Pitch Performance: Luke Gregerson
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
SL 0.696 0.756 0.672
SI 0.527 0.318 0.588
FT 0.400 0.436 0.600
FF 0.000 0.000 0.038
CH 0.000 0.000 0.000
FC 0.000 0.000 0.000
By Pitch Performance: David Price
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FT 0.633 0.620 0.514
CH 0.280 0.254 0.231
FC 0.174 0.181 0.220
FF 0.114 0.156 0.385
KC 0.007 0.000 0.040
By Pitch Performance: Max Scherzer
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FF 0.900 0.884 0.796
SL 0.237 0.254 0.254
CH 0.065 0.067 0.078
CU 0.000 0.005 0.023
FC 0.000 0.000 0.014
FT 0.000 0.000 0.111
By Pitch Performance: Aroldis Chapman
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FF 0.964 0.962 0.922
SL 0.047 0.093 0.160
CH 0.031 0.000 0.094
SI 0.000 0.000 0.333
By Pitch Performance: Clayton Kershaw
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FF 0.677 0.712 0.691
SL 0.378 0.357 0.421
CU 0.339 0.379 0.293
FT 0.000 0.032 0.194
CH 0.000 0.000 0.091
By Pitch Performance: Madison Bumgarner
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FF 0.551 0.652 0.596
SL 0.270 0.312 0.374
FT 0.096 0.181 0.453
CU 0.422 0.266 0.159
FC 0.110 0.333 0.447
CH 0.011 0.011 0.056
By Pitch Performance: Sonny Gray
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FF 0.501 0.505 0.512
FT 0.470 0.488 0.473
CU 0.169 0.181 0.262
SL 0.494 0.471 0.435
CH 0.021 0.042 0.217
FC 0.027 0.000 0.135
By Pitch Performance: Huston Street
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
SI 0.632 0.632 0.592
SL 0.780 0.817 0.817
CH 0.559 0.627 0.441
By Pitch Performance: Brad Boxberger
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FF 0.913 0.920 0.869
CH 0.222 0.222 0.296
SL 0.000 0.056 0.111
CU 0.000 0.000 0.091
FC 0.000 0.000 0.000
FT 0.000 0.000 0.000
By Pitch Performance: Zack Greinke
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FF 0.787 0.757 0.674
SL 0.279 0.322 0.351
CH 0.252 0.286 0.255
CU 0.000 0.019 0.057
FT 0.000 0.014 0.077
EP 0.048 0.048 0.048
By Pitch Performance: Shawn Tolleson
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FF 0.901 0.924 0.807
CH 0.153 0.153 0.102
SL 0.102 0.051 0.186
FT 0.077 0.077 0.231
FC 0.000 0.000 0.111
By Pitch Performance: Jordan Zimmermann
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FF 0.856 0.849 0.743
SL 0.224 0.218 0.271
CU 0.045 0.045 0.115
CH 0.000 0.014 0.071
FT 0.000 0.015 0.227
By Pitch Performance: Jacob deGrom
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FF 0.886 0.881 0.738
SL 0.090 0.103 0.172
FT 0.018 0.109 0.234
CH 0.034 0.037 0.158
CU 0.022 0.004 0.053
By Pitch Performance: Gerrit Cole
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FF 0.934 0.939 0.825
SL 0.086 0.113 0.151
KC 0.007 0.014 0.056
SI 0.000 0.006 0.184
CH 0.007 0.014 0.049
FT 0.000 0.000 0.127
CU 0.000 0.000 0.000
By Pitch Performance: Mark Melancon
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FC 0.903 0.914 0.836
KC 0.277 0.249 0.283
FF 0.022 0.034 0.213
FS 0.000 0.000 0.000
By Pitch Performance: Jake Arrieta
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
SI 0.909 0.891 0.786
SL 0.099 0.147 0.234
CU 0.155 0.158 0.142
FF 0.004 0.018 0.234
CH 0.054 0.048 0.060
By Pitch Performance: Andrew Miller
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
SL 0.727 0.763 0.761
FF 0.410 0.403 0.355
FT 0.000 0.000 0.059
By Pitch Performance: Stephen Strasburg
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FF 0.908 0.877 0.746
CU 0.060 0.077 0.131
CH 0.097 0.131 0.154
FT 0.006 0.019 0.237
SL 0.013 0.007 0.065
By Pitch Performance: Collin McHugh
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FF 0.462 0.483 0.497
FC 0.410 0.443 0.443
CU 0.357 0.410 0.343
SL 0.045 0.182 0.318
FT 0.000 0.000 0.104
CH 0.013 0.013 0.067
By Pitch Performance: Michael Wacha
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FF 0.888 0.880 0.790
CH 0.253 0.262 0.245
FC 0.046 0.046 0.131
CU 0.005 0.009 0.028
FT 0.000 0.000 0.211
By Pitch Performance: Chris Sale
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FT 0.518 0.627 0.668
SL 0.415 0.352 0.316
CH 0.244 0.242 0.233
FF 0.176 0.137 0.575
FA 0.000 0.000 0.000
By Pitch Performance: Zack Greinke
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FF 0.787 0.757 0.674
SL 0.279 0.322 0.351
CH 0.252 0.286 0.255
CU 0.000 0.019 0.057
FT 0.000 0.014 0.077
EP 0.048 0.048 0.048
By Pitch Performance: Yu Darvish
pitch_type rate_trashcan1 rate_trashcan2 rate_trashcan3
FF 0.744 0.751 0.680
SL 0.324 0.332 0.360
FT 0.144 0.206 0.428
FC 0.080 0.168 0.292
CU 0.061 0.000 0.045
CH 0.000 0.000 0.048
FS 0.000 0.000 0.000
EP 0.000 0.000 0.000